import argparse
import os
import sys
import time
from datetime import datetime

# 导入耕地提取器
from sam2_crop_extractor import extract_crop_fields_from_image


def parse_arguments():
    """
    解析命令行参数
    
    Returns:
        argparse.Namespace: 解析后的参数
    """
    parser = argparse.ArgumentParser(description='遥感耕地地块提取工具')
    
    # 必需参数
    parser.add_argument('--image_path', '-i', required=True,
                        help='遥感影像文件路径')
    
    # 可选参数
    parser.add_argument('--output_path', '-o', default=None,
                        help='输出Shapefile文件路径（默认在results目录下）')
    
    parser.add_argument('--log_level', '-l', default='info',
                        choices=['debug', 'info', 'warning', 'error'],
                        help='日志级别')
    
    # 分幅处理参数
    parser.add_argument('--enable-tiling', action='store_true',
                        help='启用分幅处理')
    
    parser.add_argument('--disable-tiling', action='store_true',
                        help='禁用分幅处理')
    
    # 分幅保存和加载参数
    parser.add_argument('--save-tiles', action='store_true',
                        help='保存分幅结果（默认根据配置）')
    
    parser.add_argument('--no-save-tiles', action='store_true',
                        help='不保存分幅结果（默认根据配置）')
    
    parser.add_argument('--load-tiles', action='store_true',
                        help='加载已有的分幅结果（默认根据配置）')
    
    parser.add_argument('--no-load-tiles', action='store_true',
                        help='不加载已有的分幅结果（默认根据配置）')
    
    # 显示版本信息
    parser.add_argument('--version', '-v', action='store_true',
                        help='显示版本信息')
    
    return parser.parse_args()


def check_file_exists(file_path):
    """
    检查文件是否存在
    
    Args:
        file_path: 文件路径
        
    Returns:
        bool: 文件是否存在
    """
    if not os.path.exists(file_path):
        print(f"错误: 文件不存在: {file_path}")
        return False
    return True


def setup_logging(log_level):
    """
    设置日志级别
    
    Args:
        log_level: 日志级别
    """
    # 这里可以添加更复杂的日志设置
    # 目前简化实现，直接打印信息
    pass


def print_version():
    """
    打印版本信息
    """
    print("遥感耕地地块提取工具 v1.0")
    print("基于SAM2和GDAL实现的自动耕地提取系统")


def main():
    """
    主函数
    """
    # 解析命令行参数
    args = parse_arguments()
    
    # 显示版本信息
    if args.version:
        print_version()
        sys.exit(0)
    
    # 设置日志级别
    setup_logging(args.log_level)
    
    # 检查输入文件是否存在
    if not check_file_exists(args.image_path):
        sys.exit(1)
    
    # 确定是否启用分幅处理
    enable_tiling = None
    if args.enable_tiling:
        enable_tiling = True
        print("启用分幅处理")
    elif args.disable_tiling:
        enable_tiling = False
        print("禁用分幅处理")
    
    # 处理分幅保存和加载参数
    from config import IMAGE_TILING
    if args.save_tiles:
        IMAGE_TILING['save_tiles'] = True
    elif args.no_save_tiles:
        IMAGE_TILING['save_tiles'] = False
    
    if args.load_tiles:
        IMAGE_TILING['load_existing_tiles'] = True
    elif args.no_load_tiles:
        IMAGE_TILING['load_existing_tiles'] = False
    
    # 记录开始时间
    start_time = time.time()
    print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] 开始处理遥感影像: {args.image_path}")
    
    try:
        # 执行耕地提取
        output_file = extract_crop_fields_from_image(
            args.image_path, 
            args.output_path,
            enable_tiling=enable_tiling
        )
        
        # 记录结束时间
        end_time = time.time()
        print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] 处理完成，总耗时: {end_time - start_time:.2f}秒")
        print(f"结果文件: {output_file}")
        
    except Exception as e:
        print(f"处理过程中发生错误: {e}")
        sys.exit(1)


if __name__ == "__main__":
    main()